/**
 * Tools
 */
var Tools = function() {
};
Tools.prototype = new Object();
/**
 * create a file
 * 
 * @param args
 *            parent : "3f00", type : "EF", descriptor : "02", record_length :
 *            "00 0B", id : "2F 00", aid : "xxxx..",lcsi : "07", security : "2F
 *            06 02", size : "00 0B", sfi : "",pindo:"", other : "C0 01 40"
 */
Tools.create = function(args) {
	var all_data = new ByteArray("");

	var id = new ByteArray("83 02");
	if (typeof args.id == "string") {
		id.appendHexString(args.id);
	} else {
		id.appendShort(args.id);
	}

	var lcsi = new ByteArray("8A 01 " + args.lcsi);

	var security = new ByteArray(args.security);
	security.insertByte(0, security.length);
	security.insertByte(0, 0x8B);

	var other = new ByteArray("");
	if (typeof args.other != "undefined") {
		other.appendByte(0xA5);
		other.appendHexString(args.other);
		other.insertByte(1, other.length - 1);
	}
	if (typeof args.type == "undefined") {
		args.type == "EF";
	}
	if (args.type.toUpperCase() != "EF") {
		var descriptor = new ByteArray("82 02 38 21");
		var size = new ByteArray("81");
		if (typeof args.size == "string") {
			size.appendHexString(args.size);
			size.insertByte(1, size.length - 1);
		} else {
			if (args.size <= 0xFFFF) {
				size.appendByte(0x02);
				size.appendShort(args.size);
			} else {
				size.appendByte(0x04);
				size.appendInt(args.size);
			}
		}
		var pindo = new ByteArray(args.pindo);
		pindo.insertByte(0, pindo.length);
		pindo.insertByte(0, 0xC6);

		var aid = new ByteArray("");
		if (args.type.toUpperCase() == "ADF") {
			aid.appendHexString(args.aid);
			aid.insertByte(0, aid.length);
			aid.insertByte(0, 0x84);
		}
		all_data.append(descriptor).append(id).append(aid).append(lcsi).append(
				security).append(size).append(pindo).append(other);
		// println(all_data.toString());
	} else {
		var descriptor = new ByteArray(args.descriptor);
		if (typeof args.record_length != "undefined") {
			descriptor.appendByte(0x21);
			if (typeof args.record_length == "string") {
				descriptor.appendHexString(args.record_length);
			} else {
				descriptor.appendShort(args.record_length);
			}
		}
		descriptor.insertByte(0, descriptor.length);
		descriptor.insertByte(0, 0x82);

		var size = new ByteArray("80");
		if (typeof args.size == "string") {
			size.appendHexString(args.size);
			size.insertByte(1, size.length - 1);
		} else {
			if (args.size <= 0xFFFF) {
				size.appendByte(0x02);
				size.appendShort(args.size);
			} else {
				size.appendByte(0x04);
				size.appendInt(args.size);
			}
		}
		var sfi = new ByteArray("");
		if (typeof args.sfi == "undefined") {

		} else {
			sfi.appendByte(0x88);
			if (typeof args.sfi == "string") {
				sfi.appendHexString(args.sfi);
			} else {
				sfi.appendByte(args.sfi);
			}
			sfi.insertByte(1, sfi.length - 1);
		}

		all_data.append(descriptor).append(id).append(lcsi).append(security)
				.append(size);
		all_data.append(sfi).append(other);
		// println(all_data.toString());
	}

	if (all_data.length > 0x80) {
		all_data.insertByte(0, all_data.length);
		all_data.insertByte(0, 0x81);
	} else {
		all_data.insertByte(0, all_data.length);
	}
	all_data.insertByte(0, 0x62);
	var sys = new FileSystem(card);
	if (typeof args.parent == "undefined" || args.parent == "") {
		args.parent = null;
	}
	sys.create(args.parent, all_data);
};
